package com.niit.session21;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Savepoint;

import com.niit.session20.JDBCUtils;

public class ATM {
	public static void main(String[] args) {
//		转账：分为两个步骤，
//		1.从你的账户扣除500
//		2.让对方的账号增加500
		Connection conn = JDBCUtils.getConn();
		try {
//			关闭自动的事务提交
			conn.setAutoCommit(false);
//			1.从你的账户扣除500
			PreparedStatement ps = conn.prepareStatement("update user set balance = balance -500 where id = 1" );
			int update = ps.executeUpdate();
//			System.out.println(1/0);
//			2.让对方的账号增加500
			PreparedStatement ps1 = conn.prepareStatement("update user set balance = balance +500 where id = 2" );
			int update1 = ps1.executeUpdate();
//			如果事务流程很长，可以在事务流程中设置保存点
			Savepoint savepoint = conn.setSavepoint();
			PreparedStatement ps2 = conn.prepareStatement("update user set balance = balance -1 where id = 1" );
			ps2.executeUpdate();
//			也可以回滚到指定保存点，被回滚的流程不会生效
			conn.rollback(savepoint);
			if(update>0 && update1>0) {
				System.out.println("转账成功！");
//				如果开启了手动的事务提交，在执行到commit()之前对数据库所有的更新都不会生效
				conn.commit();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
